use std::str::Chars;

fn main() {
    lifetime1();
}

// 错误，为什么？
// fn lifetime1() -> &str {
//     let name = "Tyr".to_string();
//     &name[1..]
// }
// 入参没有引用,则表示返回的是一个新对象,生命周期不能在函数内

fn lifetime1() -> String {
    let name: String = "Tyr".to_string();
    name[1..].to_string()
}

// // 错误，为什么？
// fn lifetime2(name: String) -> &str {
//     &name[1..]
// }
// 入参中并没有引用,所以是Copy或者所有权转移,name的生命周期只在函数内,返回出name的引用是无效内存

#[allow(dead_code)]
fn lifetime2(name: &str) -> &str {
    &name[1..]
}

// // 正确，为什么？
#[allow(dead_code)]
fn lifetime3(name: &str) -> Chars {
    name.chars()
}
// name有所有权,chars返回的不是引用,而是所有权转移.
